import { IBiz } from './biz'
import { IPagination } from './pagination'
import { IQueryParams } from './queryParams'
import { Currency } from './common'

export enum ECategory {
  Qr = 'qr',
  Card = 'card',
  Ec = 'ec',
}

export enum ECategoryUrl {
  qr = 'zebra',
  card = 'turtle',
  ec = 'eagle',
}

/* query 请求参数 */
export interface ITradeQueryParams extends IQueryParams {
  chanCode?: string
  currency?: string
  endTime?: string
  procFlag?: string
  startTime?: string
  transScene?: string
  utcOffset?: number
  terminalId?: string,
}

/** 交易统计请求参数 */
export interface ITradeStatisticQueryParams extends IQueryParams {
  level?: string // 汇总纬度
  currency?: string // 币种，必须送币种
  paidAtFrom?: string
  paidAtTo?: string
  insCode?: string
  agentCode?: string
  intMerCode?: string
  intStoreCode?: string
  channel?: string
}

export interface ITradeStatistic {
  currency: string
  insCode: string
  insName: string
  agentCode: string
  agentName: string
  intMerCode: string
  merNum: string
  merName: string
  intStoreCode: string
  storeNum: string
  storeName: string
  totalTransAmt: number
  totalTransNum: number
  totalFee: number
  subtotalAmt: number
  tipsAmt: number
  negativeTransAmt: number
  negativeTransNum: number
  positiveTransAmt: number
  positiveTransNum: number
  alp?: ITradeStaticChanObj
  wxp?: ITradeStaticChanObj
  grb?: ITradeStaticChanObj
  tru?: ITradeStaticChanObj
  dot?: ITradeStaticChanObj
  vis?: ITradeStaticChanObj
  mcc?: ITradeStaticChanObj
  upi?: ITradeStaticChanObj
  data?: ITradeStatistic[]
}

export interface ITradeStaticChanObj {
  transAmt: number
  transNum: number
  refundAmt: number
  refundNum: number
  fee: number
  refundFee: number
}

/* 查询详情 请求参数 */
export interface ITradeDetailQueryParams {
  intStoreCode: string
  orderNum: string
}

/* 交易返回信息 */
export interface ITrade extends IBiz {
  insCode: string // 机构号
  insName: string // 机构名称
  agentCode: string // 集团号
  agentName: string // 集团名称
  intMerCode: string // 内部商户号
  merNum: string // 商户编号
  merName: string // 商户名称
  intStoreCode: string // 内部门店号
  storeNum: string // 门店编号
  storeName: string // 门店名称
  terminalid: string // 终端编号
  orderNum: string // 订单号
  busicd: string // 交易类型
  chanCode: string // 渠道编号
  chanMerId: string // 渠道商户号
  currency: string // 交易币种
  chanTransAmt: number // 渠道交易金额，渠道端扣款币种相应的金额
  chanTransCurrency: string // 渠道交易币种，渠道端扣款币种
  category: ECategory
  createdAt: string // 交易时间
  paymentBrand: string // 渠道，支付品牌
  /** 判断是否成功 */
  procFlag: string // 处理标志
  revFlag: ERevFlag // 冲正标志
  refundAmt: number // 退款金额
  discountAmt: number // 折扣金额
  storeMcc: string // 门店MCC
  tradeFrom: string // 交易来源：android，ios，web，docode etc.
  transAmt: number // 交易金额,
  transScene: string // 交易场景
  transTime: string // 交易时间
  transStatus: string // 交易状态
  /** 1-支付 2-退款 3-预授权 4-撤销 5-关单 */
  transType: ETransType
  sysOrderNum: string // 系统订单号
  tradesRelated: ITrade[] // 关联交易
  isManualsettled: boolean
  batchNum: string
  settFlag: boolean // 清算状态（false：未清算，true：已清算）
  pendingAmt: number // 待审批金额
}

export enum ERevFlag {
  RevNormal = '0', // 正常
  RevManualVoid = '2', // 已撤销
  RevRefunded = '3', // 已退款
  RevPartRefunded = 'P', // 部分退款
  RevClosed = 'C', // 已关闭
  AdjustAmt= 'A' // 小费或者金额调整
}

export enum ETransType {
  PayTrans = 1, // 支付交易
  RefundTrans = 2, // 退款交易
}

export enum EProcFlag {
  ProcHandling = '5', // 交易处理中
  ProcFail = '2', // 交易失败
  ProcSuccess = '0', // 交易成功
}

export interface ITradePagination extends IPagination {
  data: ITrade[]
}

export interface ITradeStatisticPagination extends IPagination {
  data: ITradeStatistic
}

/* 在线收款 */
export interface ITradeOnlineCharge {
  onlinePayOrderNum: string
  no: string
  created: string
  storeName: string
  currency: string
  status: string
  commodity: string
  amount: string
  tradesRelated?: ITrade[]
}

/** 在线收款请求参数 */
export interface ITradeOnlineChargeQueryParams extends IQueryParams {
  insCode?: string // 机构编号
  agentCode?: string // 集团编号
  intMerCode?: string // 内部商户编号
  intStoreCode?: string // 内部门店编号
  onlinePayOrderNum?: string // 在线收款单号
}

export interface ITradeOnlineChargePagination extends IPagination {
  data: ITradeOnlineCharge
}

export class OnlineChargeAddSystem {
  insCode: string // 机构号
  insName: string // 机构名称
  insNameEN: string // 机构英文名称

  agentCode: string // 集团号
  agentName: string // 集团名称
  agentNameEN: string // 集团英文名称

  intMerCode: string // 商户号
  merName: string // 商户名称
  merNameEN: string // 商户英文名称

  intStoreCode: string // 内部门店号
  storeName: string // 门店名称
  storeNameEN: string // 门店英文名称
}

export class OnlineChargeAddOrder {
  currency: Currency // 币种信息
  amount: string // 金额
  duration: string // 订单有效期
  commodity: string // 商品名称
  description: string // 收款说明
}

export class OnlineChargeAddModel {
  systemInfo: OnlineChargeAddSystem
  orderInfo: OnlineChargeAddOrder
  constructor() {
    this.systemInfo = new OnlineChargeAddSystem()
    this.orderInfo = new OnlineChargeAddOrder()
  }
}

export class ManualTrans {
  orderNum: string
  intStoreCode: string
  transAmt: number // float64
  operator: string
  processType: string
  remark: string
}

export enum EChargePaidStatus {
  Paid = 'Paid',
  Unpaid = 'Unpaid',
  Close = 'Close',
}

export const ChargePaidStatusMap = {
  Paid: 'TRADE.CHARGE.STATUS.PAID',
  Unpaid: 'TRADE.CHARGE.STATUS.UNPAID',
  Close: 'TRADE.CHARGE.STATUS.CLOSE',
}

/** 根据门店编号返回的门店信息 */

export interface StoreInfo extends IBiz {
  currencies: Currency[]
}

export interface ITradeRefund {
  /**
   * 授权码
   */
  authPassword?: string

  /**
   * 内部门店号
   */
  intStoreCode: string

  /**
   * 原交易订单号
   */
  origOrderNum: string

  /**
   * 退款金额
   */
  txamt: number | string

  /**
   * 币种
   */
  currency: string

  /**
   * 平台用户名
   */
  username: string

  /**
   * 退款说明
   */
  refundDetail: string

  /**
   * 交易类型
   */
  category?: string
}
export interface ITradeManualVoid {
  insCode: string
  intStoreCode: string
  orderNum: string
}

export enum ERefundType {
  MerchantRefund = 'merchantRefund',
  ManualRefund = 'manualRefund',
  ManualPresent = 'manualPresent'
}
